package com.kylin.common.security.service.handler;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 登录处理工厂
 * @author wuhao
 * @version 1.0 - 2023/1/31
 */
@Component
public class LoginHandlerFactory {

    private static Map<String, LoginHandler> loginHandlerMap = new HashMap<>();

    @Autowired
    List<LoginHandler> loginHandlerList = Collections.emptyList();

    @PostConstruct
    public  void init() {
        //初始化加载所有的抽象认证的实例方法，并放入到内存map中，下次取的时候直接从map对象获取即可
        for(LoginHandler loginHandler : loginHandlerList) {
            loginHandlerMap.put(loginHandler.getGrantType(), loginHandler);
        }
    }

    /**
     * 根据授权模式获取授权登录处理对象
     * @param grantType 授权模式
     * @return
     * @author wuhao
     * @since 2.6.0 - 2023/1/31
     */
    public LoginHandler getLoginHandler(String grantType) {
        return loginHandlerMap.get(grantType);
    }
}
